package Day008_List_Collections_set.Demo04_Collections常用方法;

/*
    如果集合中元素是自定义类型,并使用collections工具类中的sort()方法按照默认规则排序.
    那么就要重写compareTo方法
 */

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;

public class 引用类型排序 {
    public static void main(String[] args) {

        //创建集合
        ArrayList<Student> list = new ArrayList<>();
        //创建学生类对象
        Student stu1 = new Student("杨颖",18);
        Student stu2 = new Student("赵丽颖",30);
        Student stu3 = new Student("波多野结衣",28);
        Student stu4 = new Student("迪丽热巴",18);

        list.add(stu1);
        list.add(stu2);
        list.add(stu3);
        list.add(stu4);
        System.out.println(list); //地址  需要重写toString

        //排序
        //按照默认规则排序(Student继承Comparable类,重写compareTo方法规定按年龄排序)
        Collections.sort(list, new Comparator<Student>() {
            @Override
            public int compare(Student o1, Student o2) {
                return o1.getAge()-o2.getAge();
            }
        });
        System.out.println( "默认排序后:"+list); //18 18 28 30



        //按照姓名长度 由短到长排序
        Collections.sort(list, new Comparator<Student>() {
            @Override
            public int compare(Student o1, Student o2) {
                /*
                    前(第一个参数)减后(第二个参数) 升序
                    后(第二个参数)减前(第一个参数) 降序
                 */

                return o1.getName().length() - o2.getName().length(); //重写规则,按照名字长短排序
            }
        });
        System.out.println( "按规则排序后的集合:"+ list); //2 3 4 5个字
    }
}
